
#include <iostream>
#include <string>
using namespace std;
 
int main() {
	int n[10];
	int i, j;
	int temp;                                 //作为交换的媒介 
	cout << "请输入十个数字！" << endl;
	for (i = 0; i < 10; i++) {
		cin >> n[i];
	}
	//将最大的数浮上来 
	for (i = 0; i < 9;i++) {                  // 共进行9步
		for (j = 0; j < 9 - i;j++) {      //在每一步进行10-i次两两比较
	//交换 
			if (n[j] > n[j + 1]) {
				temp = n[j];
				n[j] = n[j + 1];
				n[j + 1] = temp;
			}
		}
	}
	cout << "排序后的数据是：" << endl;
	for (i = 0; i < 10; i++)
	{
	    cout << n[i] << ' ';
	}
	cout << endl;
    system("pause");
	return 0;
}
//1比较相邻的元素。如果第一个比第二个大，就交换他们两个.
//2对每一对相邻元素做同样的工作，从开始第一对到结尾的最后一对。在这一点，最后的元素应该会是最大的数。
//3针对所有的元素重复以上的步骤，除了最后一个。
//4持续每次对越来越少的元素重复上面的步骤，直到没有任何一对数字需要比较。
// 时间复杂度分析：
// 当文件的初始状态是正序的，一趟扫描即可完成排序。
// 最好的时间复杂度为O(n^2)。
// 当文件是逆序的时候,每一次都需要对除了自己以外的关键字进行比较(1≤i≤n-1)，且每次比较都必须移动记录三次来达到交换记录位置。整一个排序需要n-趟。
// 所以2最坏时间复杂度是O(n(n-1)/2)=O(n^2),综上3平均时间复杂度是O(n^2)
// 空间复杂度分析：
// 因为冒泡排序是原地排序的算法，它是涉及相邻元素的交换，只需要开辟常量级的内存空间所以:冒泡排序的最好空间复杂度=最坏时间复杂度=平均时间复杂度=O(1)

